#ifndef CMANAGERTAGS_H_
#define CMANAGERTAGS_H_
#include "tipos.h"
#include "CManagerTag.h"
#include "IObservadorTag.h"
#include <fstream>
#include <iostream>
class CManagerTags : public IObservadorTag
{
private:
	CManagerTag* tagManager;
	
	DBFrecuencias::IndiceTag indice;
	
	DBFrecuencias::AuxIndiceTag indiceAuxiliar;
	
	DBFrecuencias::TagId menorId;
	
	void cargarTags();
	
	void guardarTags();
	
	void buscarMenorId();
	
	CManagerTags(const CManagerTags& c);
	
	std::fstream stream;
	
public:
	
	CManagerTags();
	
	virtual void incrementarNumeroPalabras(DBFrecuencias::TagId tag, DBFrecuencias::Frecuencia frec);
		
	virtual void decrementarNumeroPalabras(DBFrecuencias::TagId tag, DBFrecuencias::Frecuencia frec);
	
	DBFrecuencias::TagId crearTag(const std::string& nombreTag);
	
	DBFrecuencias::TagId consultarTag(const std::string& nombreTag);
	
	std::string consultarTagNombre(DBFrecuencias::TagId tagId);
	
	DBFrecuencias::Frecuencia consultarNumeroPalabras(DBFrecuencias::TagId tagId);
	
	DBFrecuencias::Frecuencia consultarNumeroPalabras(const std::string& nombreTag);
	
	DBFrecuencias::ListaNombreTags consultarListTags();
	
	void eliminarTag(const std::string& nombreTag);
	
	void eliminarTag(DBFrecuencias::TagId tagId);
	
	CManagerTag* getManagerTag(){ return this->tagManager;}
	
	bool existeTag(std::string nombreTag);
	
	bool existeTag(DBFrecuencias::TagId tagId);
	
	virtual ~CManagerTags();
};

#endif /*CMANAGERTAGS_H_*/
